﻿/// <reference path="../jquery-1.7.1.min.js" />
/// <reference path="../jquery.dataTables.min.js" />

//Создание таблицы со списком запросов
var _table = {

	//ID элемента <table> который будет заменяться
	itemName: 'grid',

	//Указатель на созданную таблицу
	table: null,

	//Функция сервера, для получения списка запросов
	urlGet: "/DataService.asmx/GetCurrencyBy",

	//Функция сервера, для удаления запроса
	urlDel: "/DataService.asmx/DeleteCurrencyById",

	//Создание таблицы средствами JQuery
	//Inputs:	
	//Return:
	create: function () {
		this.table = $('#' + this.itemName).dataTable({
			"bProcessing": true,
			"bScrollCollapse": true,
			"bPaginate": true,
			"bJQueryUI": false,
			"sPaginationType": "bootstrap",
			"sAjaxSource": this.urlGet,
			"sAjaxDataProp": "aaData",
			"bServerSide": true,
			"sDom": "<'row'r>t<'row'<'span6'p><'offset6 span8'l><'span4'i>>",
			"fnServerData": function (sSource, aoData, fnCallback) {
				$.ajax({
					type: "POST",
					url: sSource,
					data: aoData,
					success: function (res) {
						if (res == null)
							return;
						var resText = res.text != 'undefined' && res.text != undefined ? res.text : res.documentElement.textContent;

						if (resText != null && resText.length > 0 && resText.charAt(0) != '{')
							alert(resText);
						else if (fnCallback != null) {
							fnCallback($.parseJSON(resText));
						}
					}
				});
			},
			oLanguage: {
				"sProcessing": "Выполняется...",
				"sLengthMenu": "По _MENU_ ",
				"sZeroRecords": "Нет соответствующих записей",
				"sZeroFilterRecords": "Нет соответствующих результатов из <b>_MAX_</b> Общие результаты",
				"sInfo": "Отображено <b>_START_ - _END_</b> из <b>_TOTAL_</b> записей",
				"sInfoEmpty": "Нет записей",
				"sInfoFiltered": "(фильтруется из <b>_MAX_</b> элементов)",
				"sInfoPostFix": "",
				"sSearch": "Поиск:",
				"sUrl": "",
				"oPaginate": {
					"sFirst": "Первая",
					"sPrevious": "&lt;",
					"sNext": "&gt;",
					"sLast": "Последняя"
				}
			},
			aoColumns: [
					{ "mDataProp": "code" },
					{ "mDataProp": "name" },
					{
						//Пользовательская колонка для отображения иконки-кнопки удаления записи
						"fnRender": function (oObj) {
							return "&nbsp;<img src='/img/ico/ico-edit.gif' title='Редактировать' class='edit'/><img src='/img/ico/ico-delete.gif' title='Удалить' class='delete'/>";
						},
						"bSortable": false,
						"bSearchable": false
					}
			]
		});

		var _tbl = this.table;

		//При наведении на строку в таблицы меняется курсор и обрабатывается click для выбора записи
		_tbl.find("tbody")
			.hover(function() {
				$(this).css('cursor', 'pointer');
			}, function() {
				$(this).css('cursor', 'default');
			});

		//Обработка события click на кнопке удаления
		_tbl.find('.delete').live('click', function (event) {
			var pos = _table.table.fnGetPosition($(this).parent().parent()[0]);
			_table.delByIndex(pos);
		});

		//Обработка события click на кнопке удаления
		_tbl.find('.edit').live('click', function (event) {
			var pos = _table.table.fnGetPosition($(this).parent().parent()[0]);
			_table.editByIndex(pos);
		});

		//Обработка события click на кнопке детального просмотра
		_tbl.find('.detail').live('click', function (event) {
			var pos = _table.table.fnGetPosition($(this).parent().parent()[0]);
			_table.detailByIndex(pos);
		});
	},

	//Функция редактирования записи по индексу
	editByIndex: function (index) {
		var data = _table.table.fnGetData(index);
		location.href = 'CurrencyEdit.aspx?id=' + data.ID;
	},

	//Функция просмотра записи по индексу
	detailByIndex: function (index) {
		var data = _table.table.fnGetData(index);
		location.href = 'CurrencyDetail.aspx?id=' + data.ID;
	},

	//Функция удаления записи по индексу
	//Inputs:	index - индекс
	//Return:
	delByIndex: function (index) {
		var data = _table.table.fnGetData(index);
		if (data == null)
			return;

		var _index = index;

		$('#modal-window').removeClass('hide fade').show();
		var btn = $('#btnYes');
		btn.bind('click', function () {

			_table.delFromDb(data, function () { _table.table.fnDeleteRow(_index); });
			$('#modal-window').hide();
			btn.unbind('click');
		});
	},

	//Функция удаления записи из БД.
	//Inputs:	data - указатель на объект Request
	//			complete - функция, вызывается по завершению удаления
	//Return:
	delFromDb: function (data, complete) {
		var pars = {
			id: data.ID
		};

		$.ajax({
			dataType: 'json',
			contentType: "application/json; charset=utf-8",
			type: "POST",
			url: this.urlDel,
			data: '{id:' + data.ID + '}',
			success: function (res) {
				if (res.d == 'OK') {
					if (complete != null)
						complete();
				}
				else
					alert(res.d);
			}
		});
	}
};

//Создание таблицы
$(document).ready(function () {
	//Необходимо для работы ajax запросов get/post
	jQuery.support.cors = true;

	//Создать таблицу
	_table.create();
});
